package cn.e4j.modular.api.controller;

import cn.e4j.core.dto.Dtos;
import cn.e4j.core.dto.impl.Dto;
import cn.e4j.core.dto.requestDtoResolver.DtoParam;
import cn.e4j.core.dto.requestDtoResolver.DtoWapper;
import cn.e4j.core.reqres.response.ErrorResponseData;
import cn.e4j.core.reqres.response.ResponseData;
import cn.e4j.core.reqres.response.SuccessResponseData;
import cn.e4j.core.util.DateUtils;
import cn.e4j.core.util.ToolUtil;
import cn.e4j.modular.api.service.AzyyService;
import cn.e4j.modular.api.service.FwyyService;
import cn.e4j.modular.api.service.GwbService;
import cn.e4j.modular.api.service.WXUserService;
import cn.e4j.modular.api.util.ControllerSupport;
import cn.e4j.modular.crm.entity.MmraT;
import cn.e4j.modular.system.entity.SysUser;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;

/**
 * Created by yuan_rz on 2018/04/10.
 */
@RestController
@RequestMapping("api/wx/fwyy")
public class FwyyController extends ControllerSupport {
    @Autowired
    private FwyyService fwyyService;

    @Autowired
    private WXUserService wXUserService;

    @Autowired
    private AzyyService azyyService;

    @Autowired
    GwbService gwbService;

    /**
     * 获取已购设备列表
     *
     * @return
     */
    @RequestMapping(value = "getDeviceListData")
    public ResponseData getDeviceListData(@DtoParam DtoWapper wapper) {
        Dto inDto = wapper.getDto();
        List<Dto> list = new ArrayList<>();
        SysUser user = wapper.getSysUser();
        try {
            if (inDto.getString("GWAA007").equals("0")){
                //内部员工
                inDto.put("USERID", user.getID());

                //客户权限
                inDto.put("GWAK006", "1");
                Dto gwb001 = gwbService.getGwb001(user,inDto);
                List<Dto> _list = (List<Dto>) gwb001.get("CUSTOMERS");
                inDto.put("CUSTOMERS", _list);
            }
            else if (inDto.getString("GWAA007").equals("1")){
//                List<Dto> clist = new ArrayList<Dto>();
//                Dto dto = new Dto();
//                dto.put("ID", inDto.getString("GWAK030"));
//                clist.add(dto);
//                inDto.put("CUSTOMERS",clist);

                inDto.put("GWAK030", user.getMOBILE());
            }

            list = fwyyService.getDeviceListData(wapper.getPage(),inDto);
            list.forEach(dto->{
                dto.put("GWAM007",azyyService.getGwam007(dto));
            });
        } catch (Exception e) {
            e.printStackTrace();
            return ERROR;
        }
        return SUCCESS(list);
    }


    /**
     * 获取区域资料
     *
     * @return
     */
    @RequestMapping(value = "getAreaListData")
    public ResponseData getAreaListData(@DtoParam DtoWapper wapper) {
        Dto inDto = wapper.getDto();
        List<Dto> list = new ArrayList<Dto>();
        try {
            list = fwyyService.getAreaListData(wapper.getPage(),inDto);
        } catch (Exception e) {
            e.printStackTrace();
            return ERROR;
        }
        return SUCCESS(list);
    }

    /**
     * 服务预约提交
     *
     * @return
     */
    @RequestMapping(value = "saveFwyy")
    public ResponseData saveFwyy(@DtoParam DtoWapper wapper) {
        Dto inDto = wapper.getDto();
        SysUser currentUser = wapper.getSysUser();
        LocalDate now = LocalDate.now();
        try {

            //客户已购设备信息表-mmra_t
            QueryWrapper<MmraT> mmraTQueryWrapper = new QueryWrapper<>();
            mmraTQueryWrapper.eq("MMRAENT", inDto.getString("ENT"));//集团编号
            mmraTQueryWrapper.eq("MMRA002", inDto.getString("MMRD002"));
            mmraTQueryWrapper.eq("MMRA003", inDto.getString("MMRD003"));
            mmraTQueryWrapper.eq("MMRAACTI", "Y");
            String mmra001 = inDto.getString("MMRA001");
            if (ToolUtil.isNotEmpty(mmra001))
                mmraTQueryWrapper.eq("MMRA001", mmra001);

            List<MmraT> list = new MmraT().selectList(mmraTQueryWrapper);

            if (list!=null && list.size()>0) {

                //TODO 需要判断 订单是不是在受理中。。。。

                MmraT mmra = list.get(0);

                // 就是服务的归属地，譬如客户在余杭区归属的服务区域就默认是余杭，
                // 但服务组织会变，今年是服务一组，到明年余杭区又归服务二组了
                Dto gwak_tPO = wXUserService.getGwakByKey(mmra.getMMRAENT(), mmra.getMMRA001());
                inDto.put("MMRD006", gwak_tPO.getString("GWAK023"));
                inDto.put("MMRD007", gwak_tPO.getString("GWAK024"));
                inDto.put("MMRD008", gwak_tPO.getString("GWAK025"));

//                if (!AppUtils.isEmpty(gwak_tPO.getString("GWAK025"))) {
//                    inDto.put("MMRD009", gwak_tPO.getString("GWAK025"));
//                } else if (!AppUtils.isEmpty(gwak_tPO.getString("GWAK024"))) {
//                    inDto.put("MMRD009", gwak_tPO.getString("GWAK024"));
//                } else if (!AppUtils.isEmpty(gwak_tPO.getString("GWAK023"))) {
//                    inDto.put("MMRD009", gwak_tPO.getString("GWAK023"));
//                } else if (!AppUtils.isEmpty(gwak_tPO.getString("GWAK022"))) {
//                    inDto.put("MMRD009", gwak_tPO.getString("GWAK022"));
//                }
                //方案二  （先不存MMRD009 根据mmred006或MMRD007）
//                inDto.put("MMRD009", "all");
//                if (!AppUtils.isEmpty(gwak_tPO.getString("GWAK024"))) {
//                    Dto list1Dto = Dtos.newDto();
//                    list1Dto.put("mmre004",gwak_tPO.getString("GWAK024"));
//                    List<Dto> list1 = fwyyService.getMmre(list1Dto);
//                    if(list1.size()>0){
//                        inDto.put("MMRD009", list1.get(0).getString("mmre004"));
//                    }
//                }
//
//                if (inDto.getString("MMRD009").equals("all")&&!AppUtils.isEmpty(gwak_tPO.getString("GWAK023"))) {
//                    Dto list2Dto = Dtos.newDto();
//                    list2Dto.put("mmre004",gwak_tPO.getString("GWAK023"));
//                    List<Dto> list2 = fwyyService.getMmre(list2Dto);
//                    if(list2.size()>0){
//                        inDto.put("MMRD009", list2.get(0).getString("mmre004"));
//                    }
//                }

                inDto.put("MMRDENT", mmra.getMMRAENT());
                String mmra021 = mmra.getMMRA021();
                // 服务单号
                inDto.put("MMRDDOCNO", "WXFW" + DateUtils.getDate("yyyyMMddHHmmssSSS"));
                inDto.put("MMRDSEQ", 1);
                inDto.put("MMRD016", "1");// 来源公众号
                inDto.put("MMRDACTI", "Y");
                inDto.put("MMRDDOCDATE", now);
                inDto.put("MMRDDATE", now);

//                inDto.put("MMRD017", currentUser.getACCOUNT());
                inDto.put("MMRD020", "1"); // 发起
                inDto.put("MMRD023", "1");// 需要上门服务
                inDto.put("MMRD024", inDto.getString("MMRD004")); // 预计上门服务日期
                inDto.put("MMRD025", inDto.getString("MMRD005"));// 预计上门服务时间段
                inDto.put("MMRDUSER", currentUser.getACCOUNT());
                inDto.put("MMRD017",ToolUtil.isEmpty(mmra021)?currentUser.getACCOUNT():mmra021);////经销商销售员微信号 即预约人

                fwyyService.saveFwyy(currentUser,inDto);
            } else {
                return ERROR("没有找到对应的设备");
            }

        } catch (Exception e) {
            e.printStackTrace();
            return ERROR("系统异常请重试");
        }
        return SUCCESS;
    }

    /**
     * 获取故障类型
     *
     * @return
     */
    @RequestMapping(value = "getTags")
    public ResponseData getTags(@DtoParam DtoWapper wapper) {
        Dto inDto = wapper.getDto();
        List<Dto> list = new ArrayList<Dto>();
        try {
            list = fwyyService.getTags(inDto);
        } catch (Exception e) {
            e.printStackTrace();
            return ERROR;
        }
        return SUCCESS(list);
    }
    
}
